package dao;

import hbt.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import Dominio.ItemListaDePrecio;
import Dominio.ListaDePrecio;

public class ListaPreciosDAO {

	private static ListaPreciosDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;
	
	public static ListaPreciosDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new ListaPreciosDAO();
		} 
		return instancia;
	}
	
	private Session getSession(){
		if(session == null || !session.isOpen())
			session = sf.openSession();
		return session;
	}
	
	public void closeSession(){
		if (session.isOpen()) session.close();
	}
	
	public void persistListaPrecios(ListaDePrecio lp)
	{
		try
		{
		Session s=getSession();
		s.beginTransaction();
		s.persist(lp);
		s.flush();
		s.getTransaction().commit();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void persistItemListaPrecios(ItemListaDePrecio item){
		Session s=getSession();
		s.beginTransaction();
		s.persist(item);
		s.flush();
		s.getTransaction().commit();
	}
	
	//El numeroListaPrecios es el ID que se genera
	public ListaDePrecio getListaPrecios(int numeroListaPrecios){
		Session s=getSession();
		s.beginTransaction();
		ListaDePrecio lista = (ListaDePrecio)s.load(ListaDePrecio.class, new Integer(numeroListaPrecios));
		s.getTransaction().commit();
		return lista;
	}
	
	public ItemListaDePrecio getItemListaPrecios(int idItemListaPrecios){
		Session s=getSession();
		s.beginTransaction();
		ItemListaDePrecio item = (ItemListaDePrecio)s.load(ItemListaDePrecio.class, new Integer(idItemListaPrecios));
		s.getTransaction().commit();
		return item;
	}
	
	@SuppressWarnings("unchecked")
	public List<ListaDePrecio> listaDeProveedor(int idProveedor){
	
	Session s = this.getSession();
	List<ListaDePrecio> lista= s.createQuery("from ListaDePrecio lp where lp.idProveedor = idProveedor").list();
	return lista;
	}

	@SuppressWarnings("unchecked")
	public List<ItemListaDePrecio> listaDeItemsDeListaDePrecio (ListaDePrecio lp)
	{
	
	int idLP = lp.getId();
		
	Session s = this.getSession();
	List<ItemListaDePrecio> lista= s.createQuery("from ItemListaDePrecio ilp where ilp.idListaDePrecio = :id ").setParameter("id", idLP).list();
	return lista;
	}

	public List<ListaDePrecio> getListasPrecios() 
	{
			Session s = this.getSession();
			@SuppressWarnings("unchecked")
			List<ListaDePrecio> lista= s.createQuery("Select distinct lista from ListaDePrecio lista inner join lista.itemsListaDePrecio items").list();
			return lista;
		
		
	}

	public ItemListaDePrecio getItemListaPreciosPorRodamiento(int idRodamiento) 
	{
		Session s = this.getSession();
		ItemListaDePrecio item = (ItemListaDePrecio) s.createQuery("select ilp from ItemListaDePrecio ilp where ilp.rodamiento.id = :id").setParameter("id", idRodamiento).uniqueResult();
		return item;
	}
}
